{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Tobit regression with TensorFlow\n",
    "\n",
    "Tobit regression fits the following model for non-negative data $ y $: \n",
    "\n",
    "$  y({\\bf X}) = \\max (0, w_0 + \\sum_{i=1}^{N} w_i X_i + w_{N+1} \\cdot \\varepsilon) $  \n",
    "\n",
    "Here $ X_i $ are predictors, $ \\varepsilon \\sim N(0,1) $ is a standard Gaussian noise, and $ w_{N+1} $ is the noise\n",
    "volatility (standard deviation).\n",
    "\n",
    "Our problem is to fit parameters $ N+2 $ parameters $ w_{i} $ for $ i = 0, \\ldots, N+1 $ to the observed set of pairs $ \\left({\\bf X}_i, y_i \\right) $  \n",
    "\n",
    "We use synthetic data with known parameters to learn how to implement Tobit Regression in TensorFlow. "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## About iPython Notebooks ##\n",
    "\n",
    "iPython Notebooks are interactive coding environments embedded in a webpage. You will be using iPython notebooks in this class. You only need to write code between the ### START CODE HERE ### and ### END CODE HERE ### comments. After writing your code, you can run the cell by either pressing \"SHIFT\"+\"ENTER\" or by clicking on \"Run Cell\" (denoted by a play symbol) in the upper bar of the notebook. \n",
    "\n",
    "We will often specify \"(≈ X lines of code)\" in the comments to tell you about how much code you need to write. It is just a rough estimate, so don't feel bad if your code is longer or shorter."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import tensorflow as tf\n",
    "\n",
    "import sys\n",
    "sys.path.append(\"..\")\n",
    "import grading\n",
    "\n",
    "try:\n",
    "    import matplotlib.pyplot as plt\n",
    "    %matplotlib inline\n",
    "except:\n",
    "    pass\n",
    "\n",
    "try:\n",
    "    from mpl_toolkits.mplot3d import Axes3D\n",
    "except:\n",
    "    pass"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "### ONLY FOR GRADING. DO NOT EDIT ###\n",
    "submissions=dict()\n",
    "assignment_key=\"w3Hc-vZdEeehlBIKDnZryg\" \n",
    "all_parts=[\"pLnY5\", \"RKR6p\", \"IU1pw\", \"ISVtY\", \"Cutr3\"]\n",
    "### ONLY FOR GRADING. DO NOT EDIT ###"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "COURSERA_TOKEN = \" \"# the key provided to the Student under his/her email on submission page\n",
    "COURSERA_EMAIL = \" \"# the email"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# utility function  to reset the TF graph to the same state each time\n",
    "def reset_graph(seed=42):\n",
    "    # to make results reproducible across runs\n",
    "    tf.reset_default_graph()\n",
    "    tf.set_random_seed(seed)\n",
    "    np.random.seed(seed)\n",
    "    "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Tobit Regression class\n",
    "\n",
    "**Instructions**:\n",
    "Complete the code for the calculation of loss function (the negative log-likelihood)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "class Tobit_Regression:\n",
    "    \n",
    "    def __init__(self, n_features, learning_rate=0.005, L=0):\n",
    "        \n",
    "        self.input = tf.placeholder(tf.float32, [None, n_features], name=\"Input\")\n",
    "        self.target = tf.placeholder(tf.float32, [None, 1], name=\"Target\")\n",
    "        \n",
    "        # the first weight is for the intercept, the last one is for a square root of the noise std \n",
    "        self.weights = tf.Variable(tf.random_normal([n_features + 2, 1]))\n",
    "        \n",
    "        # Augmented data matrix is obtained by adding a column of ones to the data matrix\n",
    "        self.data_plus_bias = tf.concat([tf.ones([tf.shape(self.input)[0], 1]), self.input], axis=1)\n",
    "\n",
    "        #######################################################################\n",
    "        # MLE for Tobit regression \n",
    "        \n",
    "        # noise volatility is obtained as a square of the last weight to ensure positivity \n",
    "        self.sigma = 0.0001 + tf.square(self.weights[-1])\n",
    "        \n",
    "        # term1 and term2 are just placeholders initialized such that the code runs\n",
    "        # students need to initialize them appropriately to solve this assignment\n",
    "        term1 = tf.Variable(np.zeros(shape=(n_features + 2, 1)))\n",
    "        term2 = tf.Variable(np.zeros(shape=(n_features + 2, 1)))\n",
    "        # THIS IS THE PART THAT STUDENTS ARE SUPPOSED TO WRITE THEMSELVES TO COMPLETE THE IMPLEMENTATION \n",
    "        # OF THE TOBIT REGRESSION MODEL\n",
    "        \n",
    "        # FOR THE ASSIGNMENT: complete the code for the calculation of loss function \n",
    "        # (the negative log-likelihood)\n",
    "        ### START CODE HERE ### (≈ 6-7 lines of code)\n",
    "        self.y_out = tf.matmul(self.data_plus_bias[:, :], self.weights[:-1])\n",
    "        norm = tf.distributions.Normal(loc=0.0, scale=1.0)\n",
    "        term1 = tf.to_float(self.target > L) * tf.log(0.00001 + 1/self.sigma * norm.prob((self.target - self.y_out)/self.sigma))\n",
    "        term2 = (1-tf.to_float(self.target > L)) * tf.log(0.00001 + 1 - norm.cdf((self.y_out - L)/self.sigma))\n",
    "        ### END CODE HERE ###\n",
    "        self.loss = - tf.reduce_mean(term1 + term2)\n",
    "        \n",
    "        #####################################################################\n",
    "\n",
    "        # Use Adam optimization for training\n",
    "        self.train_step = (tf.train.AdamOptimizer(learning_rate).minimize(self.loss), -self.loss)\n",
    "        \n",
    "        # prediction made from the model: Use a ReLU neuron!\n",
    "        self.output = tf.nn.relu(tf.matmul(self.data_plus_bias[:, :], self.weights[:-1]))\n",
    "        \n",
    "        # Check the output L1-norm error  \n",
    "        self.output_L1_error = tf.reduce_mean(tf.abs(self.target - self.output))\n",
    "\n",
    "    def generate_data(n_points,\n",
    "                      n_features,\n",
    "                      weights,\n",
    "                      noise_std):\n",
    "\n",
    "        # Bounds of [-1,1] in space of n_points x n_features\n",
    "        np.random.seed(42)\n",
    "        bias = np.ones(n_points).reshape((-1,1))\n",
    "        low = - np.ones((n_points,n_features),'float')\n",
    "        high = np.ones((n_points,n_features),'float')\n",
    "\n",
    "        # simulated features are uniformally distributed on [-1,1].\n",
    "        # The size n_points x n_features of array X is inferred by broadcasting of 'low' and 'high'\n",
    "        X = np.random.uniform(low=low, high=high)\n",
    "        \n",
    "        # simulated noise\n",
    "        noise = np.random.normal(size=(n_points, 1))\n",
    "        \n",
    "        # outputs    \n",
    "        Y = weights[0] * bias + np.dot(X, weights[1:]).reshape((-1,1)) + noise_std * noise\n",
    "\n",
    "        # truncate negative values of Y    \n",
    "        np.clip(Y, a_min=0, a_max=None, out=Y)\n",
    "\n",
    "        return X, Y    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def gen_tobit_dataset(n_points, n_features, train_test_split=4):\n",
    "    \"\"\"\n",
    "    Generate dataset for Tobit regression model and split it into training and test portions\n",
    "    \n",
    "    \"\"\"\n",
    "    # n_features + 1 weights (one for a constant feature)\n",
    "    data_weights = np.array([-0.25, 0.5, 0.2, .1]) \n",
    "    noise_std = 0.1\n",
    "    \n",
    "    # Generate dataset\n",
    "    X, Y = Tobit_Regression.generate_data(n_points=n_points,\n",
    "                                           n_features=n_features,\n",
    "                                           weights=data_weights,\n",
    "                                           noise_std=noise_std)\n",
    "    \n",
    "    # split to the train and test set\n",
    "    # 1/4 of the data is used for a test\n",
    "    \n",
    "    n_test = int(n_points / train_test_split)\n",
    "    n_train = n_points - n_test\n",
    "    \n",
    "    X_train = X[:n_train,:]\n",
    "    Y_train = Y[:n_train].reshape((-1,1))\n",
    "\n",
    "    X_test = X[n_train:,:]\n",
    "    Y_test = Y[n_train:].reshape((-1,1))\n",
    "    return X_train, Y_train, X_test, Y_test\n",
    "\n",
    "def train_model(n_features, learning_rate, n_steps=1000):\n",
    "    \"\"\"\n",
    "    Train Tobit Regression model\n",
    "    \n",
    "    Return:\n",
    "        a tuple of:\n",
    "        - Model fitted weights, np.array\n",
    "        - loss, double \n",
    "        - fitted noise std error, double\n",
    "        - L1 error, double\n",
    "    \"\"\"\n",
    "    # create an instance of the Tobit Regression class  \n",
    "    model = Tobit_Regression(n_features=n_features, learning_rate=learning_rate)\n",
    "\n",
    "    # train the model\n",
    "    with tf.Session() as sess:\n",
    "        sess.run(tf.global_variables_initializer())\n",
    "        \n",
    "        for _ in range(0, n_steps):\n",
    "            (_, loss), weights = sess.run((model.train_step, model.weights), feed_dict={\n",
    "                model.input: X_train,\n",
    "                model.target: Y_train\n",
    "                })\n",
    "    \n",
    "        # predictions for the test set\n",
    "        # std_model = weights[-1]**2     \n",
    "        output, std_model = sess.run([model.output,model.sigma], \n",
    "                                     feed_dict={model.input: X_test})\n",
    "        \n",
    "        output_L1_error = sess.run(model.output_L1_error,\n",
    "                                   feed_dict={model.input: X_test,\n",
    "                                   model.target: Y_test})\n",
    "        sess.close()\n",
    "    return weights[:-1], loss, std_model[0], output_L1_error, output\n",
    "\n",
    "def plot_results():        \n",
    "    # Plot a projection of test prediction on the first two predictors\n",
    "    fig = plt.figure()\n",
    "    ax = fig.add_subplot(111, projection='3d')\n",
    "    ax.scatter(X_test[:,1], X_test[:,2], Y_test, s=1, c=\"#000000\")\n",
    "    ax.scatter(X_test[:,1], X_test[:,2], output.reshape([-1,1]), s=1, c=\"#FF0000\")\n",
    "    plt.xlabel('X_1')\n",
    "    plt.ylabel('X_2')\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Submission successful, please check on the coursera grader page for the status\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([-0.24247025,  0.49173024,  0.19827977,  0.0930066 ], dtype=float32)"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "### GRADED PART (DO NOT EDIT) ###\n",
    "n_points = 5000\n",
    "n_features = 3\n",
    "learning_rate = 0.05\n",
    "n_steps = 1000\n",
    "\n",
    "X_train, Y_train, X_test, Y_test = gen_tobit_dataset(n_points, n_features)\n",
    "reset_graph()\n",
    "weights, loss, std_model, error_L1, output = train_model(n_features, learning_rate, n_steps)\n",
    "\n",
    "part_1=list(weights.squeeze())\n",
    "try:\n",
    "    part1 = \" \".join(map(repr, part_1))\n",
    "except TypeError:\n",
    "    part1 = repr(part_1)\n",
    "submissions[all_parts[0]]=part1\n",
    "grading.submit(COURSERA_EMAIL, COURSERA_TOKEN, assignment_key, all_parts[0],all_parts,submissions)\n",
    "weights.squeeze()\n",
    "### GRADED PART (DO NOT EDIT) ###"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Submission successful, please check on the coursera grader page for the status\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "[0.13414386, 0.098345175, 0.019833891]"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "### GRADED PART (DO NOT EDIT) ###\n",
    "part_2=[loss, std_model, error_L1]\n",
    "try:\n",
    "    part2 = \" \".join(map(repr, part_2))\n",
    "except TypeError:\n",
    "    part2 = repr(part_2)  \n",
    "    \n",
    "submissions[all_parts[1]]=part2\n",
    "grading.submit(COURSERA_EMAIL, COURSERA_TOKEN, assignment_key, all_parts[:2],all_parts,submissions)\n",
    "[loss, std_model, error_L1]\n",
    "### GRADED PART (DO NOT EDIT) ###"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fad0e10d0f0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_results()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Fitting Linear regression and Neural Network to Non-linear data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "((7500, 3), (7500, 1))"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def generate_data(n_points=10000, n_features=3, use_nonlinear=True, \n",
    "                    noise_std=0.1, train_test_split = 4):\n",
    "    \"\"\"\n",
    "    Arguments:\n",
    "    n_points - number of data points to generate\n",
    "    n_features - a positive integer - number of features\n",
    "    use_nonlinear - if True, generate non-linear data\n",
    "    train_test_split - an integer - what portion of data to use for testing\n",
    "    \n",
    "    Return:\n",
    "    X_train, Y_train, X_test, Y_test, n_train, n_features\n",
    "    \"\"\"\n",
    "    # Linear data or non-linear data?\n",
    "    if use_nonlinear:\n",
    "        weights = np.array([[1.0, 0.5, 0.2],[0.5, 0.3, 0.15]], dtype=np.float32)\n",
    "    else:\n",
    "        weights = np.array([1.0, 0.5, 0.2], dtype=np.float32)\n",
    "    \n",
    "    np.random.seed(42)\n",
    "    bias = np.ones(n_points).reshape((-1,1))\n",
    "    low = - np.ones((n_points,n_features), dtype=np.float32)\n",
    "    high = np.ones((n_points,n_features), dtype=np.float32)\n",
    "    \n",
    "    X = np.random.uniform(low=low, high=high)\n",
    "    noise = np.random.normal(size=(n_points, 1))\n",
    "    noise_std = 0.1\n",
    "    \n",
    "    if use_nonlinear:\n",
    "        Y = (weights[0,0] * bias + np.dot(X, weights[0, :]).reshape((-1,1)) + \n",
    "             np.dot(X*X, weights[1, :]).reshape([-1,1]) +\n",
    "             noise_std * noise)\n",
    "    else:\n",
    "        Y = (weights[0] * bias + np.dot(X, weights[:]).reshape((-1,1)) + \n",
    "             noise_std * noise)\n",
    "    \n",
    "    n_test = int(n_points/train_test_split)\n",
    "    n_train = n_points - n_test\n",
    "    \n",
    "    X_train = X[:n_train,:]\n",
    "    Y_train = Y[:n_train].reshape((-1,1))\n",
    "\n",
    "    X_test = X[n_train:,:]\n",
    "    Y_test = Y[n_train:].reshape((-1,1))\n",
    "    \n",
    "    return X_train, Y_train, X_test, Y_test, n_train, n_features\n",
    "\n",
    "X_train, Y_train, X_test, Y_test, n_train, n_features = generate_data(use_nonlinear=False)\n",
    "X_train.shape, Y_train.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "((7500, 3), (7500, 1))"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.random.seed(42)\n",
    "X_train, Y_train, X_test, Y_test, n_train, n_features = generate_data(use_nonlinear=True)\n",
    "X_train.shape, Y_train.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Instructions**\n",
    "Implement sklearn_lin_regress() function which returns a tuple of\n",
    "\n",
    "- coefficients of linear regression\n",
    "- an instance of LinearRegression class trained to X_train, Y_train\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# GRADED FUNCTION: sklearn_lin_regress\n",
    "def sklearn_lin_regress(X_train, Y_train):\n",
    "    \"\"\"\n",
    "    Arguments:\n",
    "    X_train  - np.array of size (n by k) where n is number of observations \n",
    "                of independent variables and k is number of variables\n",
    "    Y_train - np.array of size (n by 1) where n is the number of observations of dependend variable\n",
    "    \n",
    "    Return: a tuple of \n",
    "      - np.array of size (k+1 by 1) of regression coefficients\n",
    "      - an instance of LinearRegression\n",
    "    \"\"\"\n",
    "    from sklearn.linear_model import LinearRegression\n",
    "    lr_model = None\n",
    "    theta_sklearn = np.array([], dtype=np.float32)\n",
    "    ### START CODE HERE ### (≈ 2-3 lines of code)\n",
    "    X_train = np.hstack((np.ones((X_train.shape[0], 1)), X_train))\n",
    "    lr_model = LinearRegression(fit_intercept=False)\n",
    "    lr_model.fit(X_train, Y_train)\n",
    "    theta_sklearn = lr_model.coef_\n",
    "    ### END CODE HERE ###\n",
    "    return theta_sklearn, lr_model\n",
    "\n",
    "X_test = np.hstack((np.ones((X_test.shape[0], 1)), X_test))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Submission successful, please check on the coursera grader page for the status\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([ 1.31552735,  1.00221739,  0.50122384,  0.19928303])"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# you can make submission with answers so far to check yourself at this stage\n",
    "### GRADED PART (DO NOT EDIT) ###\n",
    "theta_sklearn, lr_model = sklearn_lin_regress(X_train, Y_train)\n",
    "\n",
    "part_3 = list(theta_sklearn.squeeze())\n",
    "try:\n",
    "    part3 = \" \".join(map(repr, part_3))\n",
    "except TypeError:\n",
    "    part3 = repr(part_3)\n",
    "    \n",
    "submissions[all_parts[2]]=part3\n",
    "grading.submit(COURSERA_EMAIL, COURSERA_TOKEN, assignment_key, all_parts[:3],all_parts,submissions)\n",
    "\n",
    "theta_sklearn.squeeze()\n",
    "### GRADED PART (DO NOT EDIT) ###"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "LinearRegression.score() computes $R^2$ coefficient. The coefficient $R^2$ is defined as $(1 - \\frac{u}{v})$, where u is the residual sum of squares $\\sum (y\\_true - y\\_pred)^2$ and v is the total sum of squares $\\sum (y\\_true - \\bar{y\\_true})^2$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Submission successful, please check on the coursera grader page for the status\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "0.9065452090081394"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# you can make submission with answers so far to check yourself at this stage\n",
    "### GRADED PART (DO NOT EDIT) ###\n",
    "# calculate Linear Regression score\n",
    "model_score = 0.\n",
    "if lr_model is not None:\n",
    "    model_score = lr_model.score(X_test, Y_test)\n",
    "part4=str(model_score)\n",
    "submissions[all_parts[3]]=part4\n",
    "grading.submit(COURSERA_EMAIL, COURSERA_TOKEN, assignment_key, all_parts[:4],all_parts,submissions)\n",
    "model_score\n",
    "### GRADED PART (DO NOT EDIT) ###"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Neural Network with Tensorflow \n",
    "\n",
    "**Instructions**\n",
    "\n",
    "Construct two-layer Neural Network utilizing neuron_layer() function. The number of nodes in two hidden layers are defined by n_hidden1 and n_hidden2, respectively. Use Gradient Descent Optimizer.\n",
    "\n",
    "The train the network using X_train / y_train and compute accuracy of the prediction using X_test data set."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def random_batch(X_train, y_train, batch_size):\n",
    "    np.random.seed(42)\n",
    "    rnd_indices = np.random.randint(0, len(X_train), batch_size)\n",
    "    X_batch = X_train[rnd_indices]\n",
    "    y_batch = y_train[rnd_indices]\n",
    "    return X_batch, y_batch\n",
    "    \n",
    "def neuron_layer(X, n_neurons, name, activation_fn=None):\n",
    "    with tf.name_scope(name):\n",
    "        n_inputs = int(X.get_shape()[1])\n",
    "        stddev = 2 / np.sqrt(n_inputs)\n",
    "        init = tf.truncated_normal((n_inputs, n_neurons), stddev=stddev)\n",
    "        W = tf.Variable(init, name=\"kernel\")\n",
    "        b = tf.Variable(tf.zeros([n_neurons]), name=\"bias\")\n",
    "        Z = tf.matmul(X, W) + b\n",
    "        if activation_fn is not None:\n",
    "            return activation_fn(Z)\n",
    "        else:\n",
    "            return Z"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "np.random.seed(42)\n",
    "X_train, Y_train, X_test, Y_test, n_train, n_features = generate_data(use_nonlinear=True)\n",
    "\n",
    "n_hidden1 = 100\n",
    "n_hidden2 = 120\n",
    "n_outputs = 1 # single value prediction\n",
    "n_inputs = X_test.shape[1]\n",
    "\n",
    "reset_graph()\n",
    "X = tf.placeholder(tf.float32, shape=(None, n_inputs), name=\"X\")\n",
    "y = tf.placeholder(tf.float32, shape=(None), name=\"y\")\n",
    "\n",
    "### START CODE HERE ### (≈ 10-15 lines of code)\n",
    "layer_1 = neuron_layer(X, n_hidden1, \"layer_1\", tf.nn.relu)\n",
    "layer_2 = neuron_layer(layer_1, n_hidden2, \"layer_2\", tf.nn.relu)\n",
    "output = neuron_layer(layer_2, n_outputs, \"layer_output\")\n",
    "loss = tf.reduce_mean(tf.square(output - y))\n",
    "### END CODE HERE ###\n",
    "\n",
    "init = tf.global_variables_initializer()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "learning_rate = 0.01\n",
    "n_epochs = 200\n",
    "batch_size = 60\n",
    "num_rec = X_train.shape[0]\n",
    "n_batches = int(np.ceil(num_rec / batch_size))\n",
    "acc_test = 0. #  assign the result of accuracy testing to this variable\n",
    "\n",
    "### START CODE HERE ### (≈ 9-10 lines of code)\n",
    "train = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss)\n",
    "with tf.Session() as sess:\n",
    "    sess.run(init)\n",
    "    for i in range(n_epochs):\n",
    "        X_batch, y_batch = random_batch(X_train, Y_train, batch_size)\n",
    "        _, c = sess.run([loss, train], feed_dict={X: X_batch, y: y_batch})\n",
    "    acc_test = sess.run(loss, feed_dict={X: X_test, y: Y_test})\n",
    "### END CODE HERE ###"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Submission successful, please check on the coursera grader page for the status\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "0.041695457"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "### GRADED PART (DO NOT EDIT) ###\n",
    "part5=str(acc_test)\n",
    "submissions[all_parts[4]]=part5\n",
    "grading.submit(COURSERA_EMAIL, COURSERA_TOKEN, assignment_key, all_parts[:5],all_parts,submissions)\n",
    "acc_test\n",
    "### GRADED PART (DO NOT EDIT) ###"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "coursera": {
   "course_slug": "guided-tour-machine-learning-finance"
  },
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
